using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using Irc.Objects;
using Irc.Events;

namespace Irc.Events
{
	[CLSCompliant(true)]
	public class ModeEventArgs : EventArgs
	{
		private IModeMessage mode;
		public IModeMessage Mode
		{
			get { return mode; }
			internal set { mode = value; }
		}
	}
	[CLSCompliant(true)]
	public class MessageEventArgs : EventArgs
	{
		private Message message;
		public Message Message
		{
			get { return message; }
			internal set { message = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class NickEventArgs : EventArgs
	{
		private Nickname oldNick;
		private Nickname newNick;
		private DateTime time;

		public Nickname OldNick
		{
			get { return oldNick; }
			set { oldNick = value; }
		}
		public Nickname NewNick
		{
			get { return newNick; }
			set { newNick = value; }
		}
		public DateTime Time
		{
			get { return time; }
			internal set { time = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class ServerEventArgs : EventArgs
	{
		private ServerMessage message;
		public ServerMessage Message
		{
			get { return message; }
			internal set { message = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class TopicEventArgs : EventArgs
	{
		private Topic topic;
		public Topic Topic
		{
			get { return topic; }
			internal set { topic = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class PingEventArgs : System.ComponentModel.CancelEventArgs
	{
		private string key;
		public string Key
		{
			get { return key; }
			set { key = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class JoinEventArgs : EventArgs
	{
		private UserMove movement;
		public UserMove Movement
		{
			get { return movement; }
			internal set { movement = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class ConnectEventArgs : System.ComponentModel.CancelEventArgs
	{
		private Servername server;
		private DateTime time;
		public Servername Server
		{
			get { return server; }
			internal set { server = value; }
		}
		public DateTime Time
		{
			get { return time; }
			internal set { time = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class MotdEventArgs : EventArgs
	{
		private Motd motd;
		public Motd Motd
		{
			get { return motd; }
			internal set { motd = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class CtcpEventArgs : EventArgs
	{
		private Ctcp ctcp;
		public Ctcp Message
		{
			get { return ctcp; }
			internal set { ctcp = value; }
		}
	}
	[CLSCompliant(true)]
	public sealed class NicklistEventArgs : EventArgs
	{
		private Nicklist nicklist;
		public Nicklist Nicklist
		{
			get { return nicklist; }
			internal set { nicklist = value; }
		}
	}
}
